/**
 * 建造者模式：
 * 定义：也叫生成器模式，将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。
 * <p>
 * <p>
 * 一般来说，如果一个对象的构建比较复杂，超出了构造函数所能包含的范围，就可以使用工厂模式和Builder模式，
 * 相对于工厂模式会产出一个完整的产品，Builder应用于更加复杂的对象的构建，甚至只会构建产品的一个部分。
 * <p>
 * 1. 相同的方法，不同的执行顺序，产生不同的事件结果时，可以采用。
 * 2.
 */
package com.yan.model;

import java.util.ArrayList;
import java.util.List;

abstract class CarModel {
    List<String> sequence = new ArrayList<>();

    protected abstract void start();

    protected abstract void stop();

    protected abstract void alarm();

    protected abstract void engineBoom();

    final public void run() {
        sequence.forEach(op -> {
            switch (op) {
                case "start":
                    this.start();
                    break;
                case "stop":
                    this.stop();
                    break;
                case "alarm":
                    this.alarm();
                    break;
                default:
                    this.engineBoom();
            }
                }
        );
    }

    public void setSequence(List<String> sequence) {
        this.sequence = sequence;
    }
}
